home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / AM1293_2.lha / Tips & Tricks / AutoRemove.pas next >
Pascal/Delphi Source File  |  1993-06-02  |  6KB  |  176 lines

  1. {***************************************************}
  2. { AutoRemoveDemo.PAS                                }
  3. {                                                   }
  4. { Dieses Programm demonstiert in HighSpeed-Pascal   }
  5. { die Nutzung von Message-Ports.                    }
  6. { Zunächst überprüft es, ob das Programm schon      }
  7. { läuft. Wenn nicht, öffnet es ein Fenster und      }
  8. { wartet auf eine Nachricht. Ansonsten schickt es   }
  9. { eine Mitteilung an das schon gestartete Programm, }
  10. { woraufhin beide Programme terminieren             }
  11. {***************************************************}
  12.  
  13. PROGRAM AutoRemoveDemo;
  14.  
  15. uses
  16.   Exec, Intuition, Graphics;     { Amiga-Strukturen }
  17.  
  18. VAR
  19.   MyWindow  :  tNewWindow;     { NewWindow-Struktur }
  20.   Window    :  pWindow;       { Zeiger aufs Fenster }
  21.  
  22.   NewPort   : tMsgPort;        { Erster MessagePort }
  23.   ReplyPort : tMsgPort;       { Zweiter MessagePort }
  24.   OldPort   : pMsgPort;  { Schon existierenden Port }
  25.   MsgSend   : tMessage;        { Message zum Senden }
  26.   MsgReceive: pMessage;        { Empfangene Message }
  27.   Dummy     : pMessage;
  28.   PortName  : string;
  29.   PortCName : ARRAY [1..40] OF BYTE;
  30.   NodeName  : string;
  31.   NodeCName : ARRAY [1..40] OF BYTE;
  32.  
  33. {****************************************************}
  34. { OpenIntuitionLib(version);                         }
  35. { Öffnet die Intuition-Library                       }
  36. { Liefert TRUE oder FALSE.                           }
  37. {****************************************************}
  38. FUNCTION OpenIntuitionLib(version:INTEGER):BOOLEAN;
  39. BEGIN
  40.   IntuitionBase:=pIntuitionBase(OpenLibrary
  41.                        ('intuition.library',version));
  42.   IF IntuitionBase=NIL THEN
  43.     OpenIntuitionLib:=FALSE
  44.   ELSE
  45.     OpenIntuitionLib:=TRUE;
  46. END;
  47.  
  48. {****************************************************}
  49. { OpenNewWindow(....);                               }
  50. { Öffnet ein Fenster und liefert den Zeiger aufs     }
  51. { Fenster                                            }
  52. {****************************************************}
  53. FUNCTION OpenNewWindow(
  54.            WLeftEdge,WTopEdge,WWidth,WHeight: INTEGER;
  55.            WDetailPen,WBlockPen: shortint;
  56.            WIDCMPFlags,WFlags: long;
  57.            WFirstGadget: pGadget;
  58.            WCheckMark: pImage;
  59.            WTitle: string;
  60.            WScreen: pScreen;
  61.            WBitMap: pBitMap;
  62.            WMinWidth,WMinHeight: INTEGER;
  63.            WMaxWidth,WMaxHeight,WType_: word;
  64.            TitleMode:BOOLEAN):pWindow;
  65. VAR TempWindow  :  tNewWindow;
  66.     TempTitle   :  ARRAY [1..80] OF byte;
  67. BEGIN
  68.   WITH TempWindow DO
  69.     BEGIN
  70.       LeftEdge    :=WLeftEdge;
  71.       TopEdge     :=WTopEdge;
  72.       Width       :=WWidth;
  73.       Height      :=WHeight;
  74.       DetailPen   :=WDetailPen;
  75.       BlockPen    :=WBlockPen;
  76.       IDCMPFlags  :=WIDCMPFlags;
  77.       Flags       :=WFlags;
  78.       FirstGadget :=WFirstGadget;
  79.       CheckMark   :=WCheckMark;
  80.       Screen      :=WScreen;
  81.       BitMap      :=WBitMap;
  82.       MinWidth    :=WMinwidth;
  83.       MinHeight   :=WMinHeight;
  84.       MaxWidth    :=WMaxWidth;
  85.       MaxHeight   :=WMaxHeight;
  86.       Type_       :=WType_;
  87.     END;
  88.     IF TitleMode THEN
  89.     BEGIN
  90.         PasToC(WTitle,TempTitle);
  91.         TempWindow.Title:=@TempTitle;
  92.     END
  93.     ELSE
  94.       TempWindow.Title:=NIL;
  95.     OpenNewWindow := OpenWindow(@TempWindow);
  96. END;
  97.  
  98. {****************************************************}
  99. { Main                                               }
  100. {****************************************************}
  101. BEGIN
  102.   { intuition.library öffnen }
  103.   IF OpenIntuitionLib(0) THEN
  104.     BEGIN
  105.       { Der Name des Message-Ports }
  106.       PortName:='AutoRemove Port';
  107.       { Convert Pascal in C-String }
  108.       PasToC(PortName,PortCName);
  109.       { Überprüfen, ob der Port schon existiert }
  110.       OldPort:=FindPort(@PortCName);
  111.       IF (OldPort<>NIL) THEN
  112.         BEGIN
  113.           Window:=OpenNewWindow(
  114.                    100,150,300,45,2,3,ACTIVEWINDOW,
  115.            SMART_REFRESH OR NOCAREREFRESH,
  116.            NIL,NIL,'^ AutoRemove Already Started',
  117.            NIL,NIL,10,10,640,256,WBENCHSCREEN,TRUE);
  118.  
  119.           { Neuen Port einrichten }
  120.           NodeName:='AutoRemove Reply';
  121.           { ...und in C-String konvertieren }
  122.           PasToC(NodeName,NodeCName);
  123.  
  124.           { Initialisieren }
  125.           ReplyPort.mp_Node.ln_Pri:=0;
  126.           ReplyPort.mp_Node.ln_Name:=@NodeCName;
  127.           ReplyPort.mp_SigTask:=pTask(FindTask(NIL));
  128.           { Den Port dem Betriebssystem mitteilen }
  129.           AddPort(@ReplyPort);
  130.  
  131.           { Initialisieren einer Botschaft }
  132.           MsgSend.mn_length:=SizeOf(tMessage);
  133.           MsgSend.mn_Node.ln_Type:=NT_MESSAGE;
  134.           MsgSend.mn_ReplyPort:=@ReplyPort;
  135.           { An den schon bekannten Port verschicken }
  136.           PutMsg(OldPort,@MsgSend);
  137.  
  138.           { Auf Bestätigung warten }
  139.           MsgReceive:=WaitPort(@ReplyPort);
  140.           { Port entfernen }
  141.           RemPort(@ReplyPort);
  142.           Delay(2000);
  143.           CloseWindow(window);
  144.         END
  145.       ELSE
  146.         BEGIN
  147.           Window:=OpenNewWindow(
  148.                    100,100,300,45,2,3,ACTIVEWINDOW,
  149.                SMART_REFRESH OR NOCAREREFRESH,
  150.                NIL,NIL,'AutoRemove Started',NIL,NIL,
  151.                10,10,640,256,WBENCHSCREEN,TRUE);
  152.           IF Window<>NIL THEN
  153.             BEGIN
  154.               { Initialisieren des Ports }
  155.               NewPort.mp_Node.ln_Pri:=0;
  156.               NewPort.mp_Node.ln_Name:=@PortCName;
  157.               NewPort.mp_SigTask:=pTask(FindTask(NIL));
  158.               AddPort(@NewPort);
  159.  
  160.               { Auf Nachricht warten }
  161.               Dummy:=WaitPort(@NewPort);
  162.               { Nachricht abholen }
  163.               MsgReceive:=GetMsg(@NewPort);
  164.               { Nachricht beantworten }
  165.               ReplyMsg(MsgReceive);
  166.               { Port entfernen }
  167.               RemPort(@NewPort);
  168.               { Kurze Pause }
  169.               Delay(2000);
  170.               CloseWindow(Window);
  171.             END;
  172.         END;
  173.       CloseLibrary(pLibrary(IntuitionBase));
  174.     END;
  175. END.
  176.